home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / ENTRY.SWG / 0001_Simple Field Input.pas next >
Pascal/Delphi Source File  |  1993-05-31  |  3KB  |  96 lines

  1. uses
  2.   crt;
  3. type
  4.   input_data = record
  5.                  st               : string;  { The string to be input }
  6.                  col,row,                         { position of input }
  7.                  attr,                              { color of input  }
  8.                  flen             : byte;   { maximum length of input }
  9.                  prompt           : string[40];
  10.                end;
  11. const
  12.   NumberOfFields = 3;
  13.   BackSpace  = $08;
  14.   Enter      = $0d;
  15.   Escape     = $1b;
  16.   space      = $20;
  17.  
  18. var
  19.   InputField : array[1..NumberOfFields] of input_data;
  20.   x          : byte;
  21.   Done       : boolean;
  22.   field      : byte;
  23.  
  24.  
  25. Procedure SetInputField(VAR inpRec   : Input_data;
  26.                             S        : STRING;
  27.                             C,R      : Byte;
  28.                             A,L      : Byte;
  29.                             P        : String);
  30.  
  31. BEGIN
  32. With inpRec DO
  33.      BEGIN
  34.      St  := S;
  35.      Col := C;
  36.      Row := R;
  37.      Attr := A;
  38.      fLen := L;
  39.      Prompt := P;
  40.      END;
  41. END;
  42.  
  43.  
  44. procedure GetStr(var inprec: input_data; var f: byte; var finished: boolean);
  45.   var
  46.     spstr  : string; { just a string of spaces }
  47.     x,y,
  48.     oldattr: byte;
  49.     ch     : char;
  50.     chval  : byte absolute ch;
  51.     len    : byte absolute inprec;
  52.   begin
  53.     with inprec do begin
  54.       FillChar(spstr,sizeof(spstr),32); spstr[0] := chr(flen);
  55.       y := row; x := col + length(prompt);
  56.       oldattr := TextAttr; finished := false;
  57.       gotoXY(col,row); write(prompt);
  58.       TextAttr := attr;
  59.       repeat
  60.         gotoXY(x,y); write(st,copy(spstr,1,flen-len)); gotoXY(x+len,y);
  61.         ch := ReadKey;
  62.         case chval of
  63.           0         : ch := ReadKey;
  64.           Enter     : begin
  65.                         inc(f);
  66.                         if f > NumberOfFields then f := 1;
  67.                         TextAttr := oldattr;
  68.                         exit;
  69.                       end;
  70.           BackSpace : if len > 0 then
  71.                         dec(len);
  72.           Escape    : begin  { the escape key is the only way to halt }
  73.                         finished := true;
  74.                         TextAttr := oldattr;
  75.                         exit;
  76.                       end;
  77.           32..255   : if len <> flen then begin
  78.                         inc(len);
  79.                         st[len] := ch;
  80.                       end;
  81.         end; { case }
  82.       until false;  { procedure only exits via exit statements }
  83.     end; { with }
  84.   end; { GetStr }
  85.  
  86. begin
  87.   Clrscr;
  88.   SetInputField(InputField[1],'',12,10,31,20,'Your Name    : ');
  89.   SetInputField(InputField[2],'',12,11,31,20,'Your Address : ');
  90.   SetInputField(InputField[3],'',12,12,31,20,'City,State   : ');
  91.   field := 1;
  92.   repeat
  93.     GetStr(InputField[field],field,Done);
  94.   until Done;
  95. end.
  96.